#pragma once
#include <ntifs.h>

#ifdef DBG
    #define DBGPRINT(_fmt, ...) DbgPrint(_fmt, __VA_ARGS__)
    #define ERRPRINT(s, c) \
        const char* str##s = #s;\
        DbgPrint("%s: %s Error, Code: %X\r\n", __FUNCTION__, str##s, c)
    #define INT3    KdBreakPoint()
#else
    #define DBGPRINT(_fmt, ...) { NOTHING; }
    #define ERRPRINT(s, c)
    #define INT3
#endif

typedef struct _KLDR_DATA_TABLE_ENTRY
{
    LIST_ENTRY InLoadOrderModuleList;
    ULONG64 ExceptionTable;
    ULONG64 ExceptionTableSize;
    ULONG64 GpValue;
    ULONG64 NonPagedDebugInfo;
    ULONG64 DllBase;
    ULONG64 EntryPoint;
    ULONG64 SizeOfImage;
    UNICODE_STRING FullDllName;
    UNICODE_STRING BaseDllName;
    ULONG64 Flags;
} KLDR_DATA_TABLE_ENTRY, * PKLDR_DATA_TABLE_ENTRY;


PUCHAR PsGetProcessImageFileName(IN PEPROCESS Process);

extern PDRIVER_OBJECT g_pDriverObject;
